package com.hll.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @program: JavaWebDemo-01
 * @description:
 * @author: Mr.Hu
 * @create: 2021-03-06 18:00
 */

/*监听器有很多，这个只是监听session
 * 刚启动tomcat，发现页面显示2人，明明只有一个浏览器，这时重启tomcat，选择deploy,刷新一下页面就只有一人
 * */
public class Listener implements HttpSessionListener {
  @Override
  public void sessionCreated(HttpSessionEvent se) { // session创建时触发
    System.out.println("创建的session：" + se.getSession().getId());
    ServletContext servletContext = se.getSession().getServletContext();
    Integer loginNum = (Integer) servletContext.getAttribute("loginNum");

    if (loginNum == null) {
      loginNum = 1;
    } else {
      loginNum = loginNum + 1;
    }

    servletContext.setAttribute("loginNum", loginNum);
  }

  /*
      我一直以为关闭浏览器session会结束,但并非销毁,而是超过默认时间（web.xml设为2分钟）
    * session 当浏览器关闭后还存在,只不过再也找不到了（因为session id以cookie形式存放在client中,关闭浏览器后该cookie自动销毁,会话型cookie）
    当用户再打开时，会分配一个新session，原session会自动销毁

   当在同一个浏览器中同时打开多个标签，发送同一个请求或不同的请求，仍是同一个session;
  当不在同一个窗口中打开相同的浏览器时，发送请求，仍是同一个session;
  当使用不同的浏览器时，发送请求，即使发送相同的请求，是不同的session;
  当把当前某个浏览器的窗口全关闭，再打开，发起相同的请求时，是不同的session。
    * */
  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("销毁 " + se.getSession().getId());
    ServletContext servletContext = se.getSession().getServletContext();
    Integer loginNum = (Integer) servletContext.getAttribute("loginNum");

    if (loginNum == null) {
      loginNum = 0;
    } else {
      loginNum = loginNum - 1;
    }

    servletContext.setAttribute("loginNum", loginNum);
  }
}
